/*
 * Created on 24/06/2005
 *
 */
package com.master.bd.calculo_frete;

import java.sql.*;

import com.master.ed.*;
import com.master.root.*;
import com.master.util.*;
import com.master.util.bd.*;

/**
 * @author Tiago
 *
 */
public class Calcula_Frete_Pac extends Calcula_Frete{


    public Calcula_Frete_Pac(ExecutaSQL executasql) {
        super(executasql);
        // // ("Calcula_Frete_Pac 1");
    }


    public void calcula(Calcula_FreteED ed)
    throws Excecoes{


            Localiza_Tabela = new Localiza_Tabela(this.executasql);
            Tabela_FreteBean tabelaFreteED = new Tabela_FreteBean();

            ed.setLocalizado("N");
            ed.setDM_Tem_Cidade("S");
            ed.setDM_Tem_Peso("N");
            ed.setDM_Tem_Modal("S");
            ed.setDM_Tem_Validade("N");
            ed.setDM_Tem_Vigencia("N");
            ed.setDM_Tem_Empresa("N");
            ed.setDM_Tem_Regiao_Estado("S");
            ed.setDM_Tem_Estado("S");
            ed.setDM_Tem_Subregiao("N");
            ed.setDM_Tem_Regiao_Pais("N");
            ed.setDM_Tem_Pais("S");
            ed.setDM_Tabela_Reversa("N");
            ed.setDM_Tem_Tabela_Unidade("S");
            ed.setDM_Tem_Produto("S");

            ed.setDM_Percurso_Busca("Origem_Destino");


                // // ("Localiza_Tabela 1");

                tabelaFreteED = Localiza_Tabela.escolheTabela(ed);


                if ("S".equals (tabelaFreteED.getDM_Localizado ())) {
                  // //  ("achou tabela- oid >> " + tabelaFreteED.getOID ());
                  // //  ("getDM_Classificacao_Produto >> " + ed.getDM_Classificacao_Produto ());
              
                  this.calculaFretePeso (tabelaFreteED , ed);
              
                  this.calculaFreteValor (tabelaFreteED , ed);
              
                  this.calculaTaxaColeta (tabelaFreteED , ed);
              
                  if (!"I".equals (tabelaFreteED.getDM_Tipo_Localizacao_Destino ())) {
                    this.calculaTaxaEntrega (tabelaFreteED , ed);
                  }
                  else {
                    this.calculaTaxaRedespacho (tabelaFreteED , ed);
                  }
              
                  // //  ("calculou tudo ");
              
                }
    }

    protected void calculaFretePeso( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------

            // // ("achou tabela- getNR_Peso >> " + ed.getNR_Peso_Tabela());

            Tipo_Movimento = "FP";
            VL_Movimento_Frete=tabelaFreteED.getVL_D_Ate5C();

            if (ed.getNR_Peso() > 5)
                VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate10C();

            if (ed.getNR_Peso() > 10)
                VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate15C();

            if (ed.getNR_Peso() > 15)
                VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate20C();

            if (ed.getNR_Peso() > 20)
                VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate25C();

            if (ed.getNR_Peso() > 25)
                VL_Movimento_Frete = tabelaFreteED.getVL_D_Ate30C();

            if (ed.getNR_Peso() > 30){
              int fracao  = 0;
              double peso = 30;
              while (peso < ed.getNR_Peso ()) {
                fracao++;
                peso+=5;
              }
              VL_Movimento_Frete += (tabelaFreteED.getVL_D_ExcedenteC () * fracao);
            }

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaFreteValor(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{
        // --------------------AD VALOREM--------------------------------------------------
            Tipo_Movimento = "AV";
            VL_Movimento_Frete = (ed.getVL_Nota_Fiscal() * tabelaFreteED.getPE_C_Ad_Valorem() / 100);

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);

    }

    protected void calculaTaxaColeta(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{
        // --------------------TX COLETA--------------------------------------------------
            Tipo_Movimento = "TXC";
            VL_Movimento_Frete=tabelaFreteED.getVL_TX_Coleta();

            if (ed.getNR_Peso() >tabelaFreteED.getNR_Peso_TX_Coleta()){
              VL_Movimento_Frete += tabelaFreteED.getVL_TX_Exc_Coleta() * (ed.getNR_Peso()-tabelaFreteED.getNR_Peso_TX_Coleta());
            }
            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaTaxaEntrega(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{
        // --------------------TX ENTREGA--------------------------------------------------
            Tipo_Movimento = "TXE";
            VL_Movimento_Frete=tabelaFreteED.getVL_TX_Entrega();

            if (ed.getNR_Peso() >tabelaFreteED.getNR_Peso_TX_Entrega()){
              VL_Movimento_Frete += tabelaFreteED.getVL_TX_Exc_Entrega() * (ed.getNR_Peso()-tabelaFreteED.getNR_Peso_TX_Entrega());
            }
            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaTaxaRedespacho(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{
        // --------------------TX Redespacho--------------------------------------------------
            Tipo_Movimento = "TXR";
            VL_Movimento_Frete=tabelaFreteED.getVL_TX_Redespacho();

            if (ed.getNR_Peso() >tabelaFreteED.getNR_Peso_TX_Redespacho()){
              VL_Movimento_Frete += tabelaFreteED.getVL_Excesso_TX_Redespacho() * (ed.getNR_Peso()-tabelaFreteED.getNR_Peso_TX_Redespacho());
            }
            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }


}
